int bind_virq_to_irq(int virq)
{
- evtchn_op_t op;
+ evtchn_op_t op = { .cmd = EVTCHNOP_bind_virq };
int evtchn, irq;
int cpu = smp_processor_id();
spin_lock(&irq_mapping_update_lock);
if ((irq = per_cpu(virq_to_irq, cpu)[virq]) == -1) {
- op.cmd = EVTCHNOP_bind_virq;
op.u.bind_virq.virq = virq;
op.u.bind_virq.vcpu = cpu;
BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
void unbind_virq_from_irq(int virq)
{
- evtchn_op_t op;
+ evtchn_op_t op = { .cmd = EVTCHNOP_close };
int cpu = smp_processor_id();
int irq = per_cpu(virq_to_irq, cpu)[virq];
int evtchn = irq_to_evtchn[irq];
spin_lock(&irq_mapping_update_lock);
if (--irq_bindcount[irq] == 0) {
- op.cmd = EVTCHNOP_close;
op.u.close.dom = DOMID_SELF;
op.u.close.port = evtchn;
BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
int bind_ipi_to_irq(int ipi)
{
- evtchn_op_t op;
+ evtchn_op_t op = { .cmd = EVTCHNOP_bind_ipi };
int evtchn, irq;
int cpu = smp_processor_id();
spin_lock(&irq_mapping_update_lock);
if ((evtchn = per_cpu(ipi_to_evtchn, cpu)[ipi]) == -1) {
- op.cmd = EVTCHNOP_bind_ipi;
op.u.bind_ipi.vcpu = cpu;
BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
evtchn = op.u.bind_ipi.port;
void unbind_ipi_from_irq(int ipi)
{
- evtchn_op_t op;
+ evtchn_op_t op = { .cmd = EVTCHNOP_close };
int cpu = smp_processor_id();
int evtchn = per_cpu(ipi_to_evtchn, cpu)[ipi];
int irq = evtchn_to_irq[evtchn];
spin_lock(&irq_mapping_update_lock);
if (--irq_bindcount[irq] == 0) {
- op.cmd = EVTCHNOP_close;
op.u.close.dom = DOMID_SELF;
op.u.close.port = evtchn;
BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
void unbind_evtchn_from_irq(unsigned int irq)
{
- evtchn_op_t op;
+ evtchn_op_t op = { .cmd = EVTCHNOP_close };
int evtchn = irq_to_evtchn[irq];
spin_lock(&irq_mapping_update_lock);
if ((--irq_bindcount[irq] == 0) && (evtchn != -1)) {
- op.cmd = EVTCHNOP_close;
op.u.close.dom = DOMID_SELF;
op.u.close.port = evtchn;
BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
/* Rebind an evtchn so that it gets delivered to a specific cpu */
static void rebind_irq_to_cpu(unsigned irq, unsigned tcpu)
{
- evtchn_op_t op;
+ evtchn_op_t op = { .cmd = EVTCHNOP_bind_vcpu };
int evtchn;
spin_lock(&irq_mapping_update_lock);
}
/* Send future instances of this interrupt to other vcpu. */
- op.cmd = EVTCHNOP_bind_vcpu;
op.u.bind_vcpu.port = evtchn;
op.u.bind_vcpu.vcpu = tcpu;
static unsigned int startup_pirq(unsigned int irq)
{
- evtchn_op_t op;
+ evtchn_op_t op = { .cmd = EVTCHNOP_bind_pirq };
int evtchn;
- op.cmd = EVTCHNOP_bind_pirq;
op.u.bind_pirq.pirq = irq;
/* NB. We are happy to share unless we are probing. */
op.u.bind_pirq.flags = probing_irq(irq) ? 0 : BIND_PIRQ__WILL_SHARE;
static void shutdown_pirq(unsigned int irq)
{
- evtchn_op_t op;
+ evtchn_op_t op = { .cmd = EVTCHNOP_close };
int evtchn = irq_to_evtchn[irq];
if (!VALID_EVTCHN(evtchn))
mask_evtchn(evtchn);
- op.cmd = EVTCHNOP_close;
op.u.close.dom = DOMID_SELF;
op.u.close.port = evtchn;
BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
continue;
/* Get a new binding from Xen. */
+ memset(&op, 0, sizeof(op));
op.cmd = EVTCHNOP_bind_virq;
op.u.bind_virq.virq = virq;
op.u.bind_virq.vcpu = 0;
evtchn_to_irq[evtchn] = -1;
/* Get a new binding from Xen. */
+ memset(&op, 0, sizeof(op));
op.cmd = EVTCHNOP_bind_ipi;
op.u.bind_ipi.vcpu = 0;
BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
int blkif_map(blkif_t *blkif, unsigned long shared_page, unsigned int evtchn)
{
blkif_sring_t *sring;
- evtchn_op_t op = { .cmd = EVTCHNOP_bind_interdomain };
int err;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_bind_interdomain,
+ .u.bind_interdomain.dom1 = DOMID_SELF,
+ .u.bind_interdomain.dom2 = blkif->domid,
+ .u.bind_interdomain.port1 = 0,
+ .u.bind_interdomain.port2 = evtchn };
if ( (blkif->blk_ring_area = alloc_vm_area(PAGE_SIZE)) == NULL )
return -ENOMEM;
return err;
}
- op.u.bind_interdomain.dom1 = DOMID_SELF;
- op.u.bind_interdomain.dom2 = blkif->domid;
- op.u.bind_interdomain.port1 = 0;
- op.u.bind_interdomain.port2 = evtchn;
err = HYPERVISOR_event_channel_op(&op);
if (err) {
unmap_frontend_page(blkif);
static int setup_blkring(struct xenbus_device *dev, struct blkfront_info *info)
{
blkif_sring_t *sring;
- evtchn_op_t op;
int err;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_alloc_unbound,
+ .u.alloc_unbound.dom = DOMID_SELF,
+ .u.alloc_unbound.remote_dom = info->backend_id };
info->ring_ref = GRANT_INVALID_REF;
}
info->ring_ref = err;
- op.cmd = EVTCHNOP_alloc_unbound;
- op.u.alloc_unbound.dom = DOMID_SELF;
- op.u.alloc_unbound.remote_dom = info->backend_id;
err = HYPERVISOR_event_channel_op(&op);
if (err) {
gnttab_end_foreign_access(info->ring_ref, 0);
int blkif_map(blkif_t *blkif, unsigned long shared_page, unsigned int evtchn)
{
blkif_sring_t *sring;
- evtchn_op_t op = { .cmd = EVTCHNOP_bind_interdomain };
int err;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_bind_interdomain,
+ .u.bind_interdomain.dom1 = DOMID_SELF,
+ .u.bind_interdomain.dom2 = blkif->domid,
+ .u.bind_interdomain.port1 = 0,
+ .u.bind_interdomain.port2 = evtchn };
if ((blkif->blk_ring_area = alloc_vm_area(PAGE_SIZE)) == NULL)
return -ENOMEM;
return err;
}
- op.u.bind_interdomain.dom1 = DOMID_SELF;
- op.u.bind_interdomain.dom2 = blkif->domid;
- op.u.bind_interdomain.port1 = 0;
- op.u.bind_interdomain.port2 = evtchn;
err = HYPERVISOR_event_channel_op(&op);
if (err) {
unmap_frontend_page(blkif);
int netif_map(netif_t *netif, unsigned long tx_ring_ref,
unsigned long rx_ring_ref, unsigned int evtchn)
{
- evtchn_op_t op = { .cmd = EVTCHNOP_bind_interdomain };
int err;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_bind_interdomain,
+ .u.bind_interdomain.dom1 = DOMID_SELF,
+ .u.bind_interdomain.dom2 = netif->domid,
+ .u.bind_interdomain.port1 = 0,
+ .u.bind_interdomain.port2 = evtchn };
netif->comms_area = alloc_vm_area(2*PAGE_SIZE);
if (netif->comms_area == NULL)
return err;
}
- op.u.bind_interdomain.dom1 = DOMID_SELF;
- op.u.bind_interdomain.dom2 = netif->domid;
- op.u.bind_interdomain.port1 = 0;
- op.u.bind_interdomain.port2 = evtchn;
err = HYPERVISOR_event_channel_op(&op);
if (err) {
unmap_frontend_pages(netif);
static int setup_device(struct xenbus_device *dev, struct netfront_info *info)
{
- evtchn_op_t op;
int err;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_alloc_unbound,
+ .u.alloc_unbound.dom = DOMID_SELF,
+ .u.alloc_unbound.remote_dom = info->backend_id };
info->tx_ring_ref = GRANT_INVALID_REF;
info->rx_ring_ref = GRANT_INVALID_REF;
}
info->rx_ring_ref = err;
- op.cmd = EVTCHNOP_alloc_unbound;
- op.u.alloc_unbound.dom = DOMID_SELF;
- op.u.alloc_unbound.remote_dom = info->backend_id;
err = HYPERVISOR_event_channel_op(&op);
if (err) {
xenbus_dev_error(dev, err, "allocating event channel");
int
tpmif_map(tpmif_t *tpmif, unsigned long shared_page, unsigned int evtchn)
{
- evtchn_op_t op = {.cmd = EVTCHNOP_bind_interdomain };
int err;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_bind_interdomain,
+ .u.bind_interdomain.dom1 = DOMID_SELF,
+ .u.bind_interdomain.dom2 = tpmif->domid,
+ .u.bind_interdomain.port1 = 0,
+ .u.bind_interdomain.port2 = evtchn };
if ((tpmif->tx_area = alloc_vm_area(PAGE_SIZE)) == NULL)
return -ENOMEM;
return err;
}
- op.u.bind_interdomain.dom1 = DOMID_SELF;
- op.u.bind_interdomain.dom2 = tpmif->domid;
- op.u.bind_interdomain.port1 = 0;
- op.u.bind_interdomain.port2 = evtchn;
err = HYPERVISOR_event_channel_op(&op);
if (err) {
unmap_frontend_page(tpmif);
{
tpmif_tx_interface_t *sring;
struct tpm_private *tp = &my_private;
- evtchn_op_t op;
int err;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_alloc_unbound,
+ .u.alloc_unbound.dom = DOMID_SELF,
+ .u.alloc_unbound.remote_dom = backend_id } ;
sring = (void *)__get_free_page(GFP_KERNEL);
if (!sring) {
}
info->ring_ref = err;
- op.cmd = EVTCHNOP_alloc_unbound;
- op.u.alloc_unbound.dom = DOMID_SELF;
- op.u.alloc_unbound.remote_dom = backend_id;
err = HYPERVISOR_event_channel_op(&op);
if (err) {
gnttab_end_foreign_access(info->ring_ref, 0);
static inline void notify_remote_via_evtchn(int port)
{
- evtchn_op_t op;
- op.cmd = EVTCHNOP_send;
- op.u.send.local_port = port;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_send,
+ .u.send.local_port = port };
(void)HYPERVISOR_event_channel_op(&op);
}
u32 dom,
int *port)
{
- evtchn_op_t op;
int rc;
-
- op.cmd = EVTCHNOP_alloc_unbound;
- op.u.alloc_unbound.remote_dom = (domid_t)remote_dom;
- op.u.alloc_unbound.dom = (domid_t)dom;
- op.u.alloc_unbound.port = (port != NULL) ? *port : 0;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_alloc_unbound,
+ .u.alloc_unbound.remote_dom = (domid_t)remote_dom,
+ .u.alloc_unbound.dom = (domid_t)dom,
+ .u.alloc_unbound.port = (port != NULL) ? *port : 0 };
if ( (rc = do_evtchn_op(xc_handle, &op)) == 0 )
{
int *port1,
int *port2)
{
- evtchn_op_t op;
int rc;
-
- op.cmd = EVTCHNOP_bind_interdomain;
- op.u.bind_interdomain.dom1 = (domid_t)dom1;
- op.u.bind_interdomain.dom2 = (domid_t)dom2;
- op.u.bind_interdomain.port1 = (port1 != NULL) ? *port1 : 0;
- op.u.bind_interdomain.port2 = (port2 != NULL) ? *port2 : 0;
-
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_bind_interdomain,
+ .u.bind_interdomain.dom1 = (domid_t)dom1,
+ .u.bind_interdomain.dom2 = (domid_t)dom2,
+ .u.bind_interdomain.port1 = (port1 != NULL) ? *port1 : 0,
+ .u.bind_interdomain.port2 = (port2 != NULL) ? *port2 : 0 };
if ( (rc = do_evtchn_op(xc_handle, &op)) == 0 )
{
int virq,
int *port)
{
- evtchn_op_t op;
int rc;
-
- op.cmd = EVTCHNOP_bind_virq;
- op.u.bind_virq.virq = (u32)virq;
- op.u.bind_virq.vcpu = 0;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_bind_virq,
+ .u.bind_virq.virq = (u32)virq,
+ .u.bind_virq.vcpu = 0 };
if ( (rc = do_evtchn_op(xc_handle, &op)) == 0 )
{
u32 dom,
int port)
{
- evtchn_op_t op;
- op.cmd = EVTCHNOP_close;
- op.u.close.dom = (domid_t)dom;
- op.u.close.port = port;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_close,
+ .u.close.dom = (domid_t)dom,
+ .u.close.port = port };
return do_evtchn_op(xc_handle, &op);
}
int xc_evtchn_send(int xc_handle,
int local_port)
{
- evtchn_op_t op;
- op.cmd = EVTCHNOP_send;
- op.u.send.local_port = local_port;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_send,
+ .u.send.local_port = local_port };
return do_evtchn_op(xc_handle, &op);
}
int port,
xc_evtchn_status_t *status)
{
- evtchn_op_t op;
int rc;
+ evtchn_op_t op = {
+ .cmd = EVTCHNOP_status,
+ .u.status.dom = (domid_t)dom,
+ .u.status.port = port };
- op.cmd = EVTCHNOP_status;
- op.u.status.dom = (domid_t)dom;
- op.u.status.port = port;
-
if ( (rc = do_evtchn_op(xc_handle, &op)) == 0 )
memcpy(status, &op.u.status, sizeof(*status));